這篇要來學習如何打開電腦攝像頭進行錄影
使用 VideoWriter() 方法,可以建立一個空的「影片檔」,將擷取到的影像圖片組成新的串流格式,寫入空的影片檔案裡,完成後就會儲存成新為新的影片
import cv2 # 引入 OpenCV 庫
# 開啟電腦的攝影機鏡頭並建立一個 VideoCapture 物件,參數 0 代表使用第一個攝影機
cap = cv2.VideoCapture(0)
# 使用 cap.get() 方法取得攝影機影像的寬度和高度,這些數值將用來設定影片的解析度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 取得影像的寬度(像素數)
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 取得影像的高度(像素數)
# 使用 cv2.VideoWriter_fourcc() 設定影片的格式,這裡使用 'MJPG' 編碼
# fourcc 是一個 4 字元的編碼,用來指定影片的壓縮格式
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 使用 cv2.VideoWriter() 創建一個 VideoWriter 物件,來寫入影片
# 參數依次為:輸出影片檔名、編碼格式、幀率(每秒幀數)、影片的解析度(寬度,高度)
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (width, height))
# 檢查攝影機是否成功開啟
if not cap.isOpened():
print("Cannot open camera") # 如果攝影機未成功開啟,打印錯誤訊息並退出程式
exit()
# 進入主迴圈,用來不斷捕捉影像並將其寫入影片檔案
while True:
# 讀取攝影機的每一幀影像,ret 表示讀取是否成功,frame 是讀取到的影像
ret, frame = cap.read()
# 如果讀取失敗,打印錯誤訊息並退出迴圈
if not ret:
print("Cannot receive frame (stream end?)") # 捕捉不到影像時提示
break
# 使用 out.write() 方法將每一幀影像寫入先前創建的影片檔案
out.write(frame)
# 顯示當前的影像,視窗名稱為 'cameraview'
cv2.imshow('cameraview', frame)
# 等待使用者按下 e 鍵,如果按下則退出迴圈
if cv2.waitKey(1) == ord('e'):
break
# 迴圈結束後釋放攝影機和影片寫入物件的資源
cap.release() # 釋放攝影機資源
out.release() # 釋放影片寫入物件資源
# 關閉所有 OpenCV 開啟的視窗
cv2.destroyAllWindows()
參考資料 :
https://steam.oxxostudio.tw/category/python/ai/opencv-write-video.html#google_vignette